package com.biavan.omservicos.util;

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

import com.biavan.omservicos.model.ConfigEmpresa;
import com.biavan.omservicos.model.Funcionario;
import com.biavan.omservicos.model.PapelUsuario;
import com.biavan.omservicos.model.Usuario;

public class GerarBanco {

	public static void main(String[] args) {
		
		HibernateUtil.gerarBanco();
		
		ImportarDados.importar();
		
		criarEmpresa();
		System.out.println("Registro de configuração criado!");
		
		String login = "Admin";
		String senha = "123456";
		String papel = "ROLE_TEC";
		
		criarUsuario(login, senha, papel);
		System.out.println("Criado o usuário: ");
		System.out.println("Login: " + login);
		System.out.println("Senha: " + senha);
		System.out.println("Papel: " + papel);

	}
	
	private static void criarEmpresa() {
		ConfigEmpresa configEmpresa = new ConfigEmpresa();
		configEmpresa.setId(1);
		configEmpresa.setMarkup(1);
		configEmpresa.setSmtpHost("smtp.gmail.com");
		configEmpresa.setSmtpLogin("omservicostccsenac@gmail.com");
		configEmpresa.setSmtpSenha("******"); 

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		session.saveOrUpdate(configEmpresa);
		session.getTransaction().commit();
	}

	private static void criarUsuario(String login, String senha, String papel) {

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		
		PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		
		Usuario usuario = new Usuario();
		usuario.setAtivo(true);
		usuario.setLogin(login);
		usuario.setSenha(passwordEncoder.encode(senha)); 

		String hql = "from Funcionario m where m.email = :email ";
		Query query = session.createQuery(hql).setString("email", "admin@omservicos.com.br");
		usuario.setFuncionario((Funcionario) query.uniqueResult());

		
		PapelUsuario papelUsuario = new PapelUsuario();
		papelUsuario.setPapel(papel);
		papelUsuario.setUsuario(usuario);

		session.saveOrUpdate(usuario);
		session.saveOrUpdate(papelUsuario);
		session.getTransaction().commit();
		
	}
	
}
